/**
 * @description:
 * @title: SpringAop
 * @author: zp
 * @date: 2021/8/23 20:41
 * spring Aop: springboot版本1.5.9  spring 4.0以上
 * 前置通知
 * 后置通知
 * 返回通知
 * 异常通知
 * 环绕通知
 * 执行顺序：环绕通知前-》前置通知-》环绕通知后-》后置通知-》返回通知
 * 异常情况执行顺序 环绕通知前-》前置通知-》后置通知-》异常通知 （区别没有环绕后置通知）
 * <p>
 * spring Aop: springboot版本2.3.3  spring 5.0以上
 * 执行顺序：环绕通知前-》前置通知-》返回通知-》后置通知-》环绕通知后
 * 异常情况执行顺序 环绕通知前-》前置通知-》异常通知 （区别没有环绕后置通知）-》后置通知
 * <p>
 * spring 循环依赖 不推荐使用构造方法注入 推荐使用set方法注入
 * 因为构造方法注入容易导致异常 BeanCurrentlyInCreationException
 * 如果使用spring演示 使用xml注入方式 把注入模式单例 改成prototype  就会出现此异常BeanCurrentlyInCreationException
 * 1	开始初始化对象A
 * singletonFactories：
 * <p>
 * earlySingletonObjects：
 * <p>
 * singletonObjects：
 * <p>
 * 2	调用A的构造，把A放入singletonFactories
 * singletonFactories：A
 * <p>
 * earlySingletonObjects：
 * <p>
 * singletonObjects：
 * <p>
 * 3	开始注入A的依赖，发现A依赖对象B
 * singletonFactories：A
 * <p>
 * earlySingletonObjects：
 * <p>
 * singletonObjects：
 * <p>
 * 4	开始初始化对象B
 * singletonFactories：A,B
 * <p>
 * earlySingletonObjects：
 * <p>
 * singletonObjects：
 * <p>
 * 5	调用B的构造，把B放入singletonFactories
 * singletonFactories：A,B
 * <p>
 * earlySingletonObjects：
 * <p>
 * singletonObjects：
 * <p>
 * 6	开始注入B的依赖，发现B依赖对象A
 * singletonFactories：A,B
 * <p>
 * earlySingletonObjects：
 * <p>
 * singletonObjects：
 * <p>
 * 7
 * 开始初始化对象A，发现A在singletonFactories里有，则直接获取A，
 * <p>
 * 把A放入earlySingletonObjects，把A从singletonFactories删除
 * <p>
 * singletonFactories：B
 * <p>
 * earlySingletonObjects：A
 * <p>
 * singletonObjects：
 * <p>
 * 8	对象B的依赖注入完成
 * singletonFactories：B
 * <p>
 * earlySingletonObjects：A
 * <p>
 * singletonObjects：
 * <p>
 * 9
 * 对象B创建完成，把B放入singletonObjects，
 * <p>
 * 把B从earlySingletonObjects和singletonFactories中删除
 * <p>
 * singletonFactories：
 * <p>
 * earlySingletonObjects：A
 * <p>
 * singletonObjects：B
 * <p>
 * 10	对象B注入给A，继续注入A的其他依赖，直到A注入完成
 * singletonFactories：
 * <p>
 * earlySingletonObjects：A
 * <p>
 * singletonObjects：B
 * <p>
 * 11
 * 对象A创建完成，把A放入singletonObjects，
 * <p>
 * 把A从earlySingletonObjects和singletonFactories中删除
 * <p>
 * singletonFactories：
 * <p>
 * earlySingletonObjects：
 * <p>
 * singletonObjects：A,B
 * <p>
 * 12	循环依赖处理结束，A和B都初始化和注入完成
 * singletonFactories：
 * <p>
 * earlySingletonObjects：
 * <p>
 * singletonObjects：A,B
 * ————————————————
 */
public class SpringAop {
}
